/*
    FreeRTOS V7.5.0 - Copyright (C) 2013 Real Time Engineers Ltd.

    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.

    ***************************************************************************
     *                                                                       *
     *    FreeRTOS provides completely free yet professionally developed,    *
     *    robust, strictly quality controlled, supported, and cross          *
     *    platform software that has become a de facto standard.             *
     *                                                                       *
     *    Help yourself get started quickly and support the FreeRTOS         *
     *    project by purchasing a FreeRTOS tutorial book, reference          *
     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *
     *                                                                       *
     *    Thank you!                                                         *
     *                                                                       *
    ***************************************************************************

    This file is part of the FreeRTOS distribution.

    FreeRTOS is free software; you can redistribute it and/or modify it under
    the terms of the GNU General Public License (version 2) as published by the
    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.

    >>! NOTE: The modification to the GPL is included to allow you to distribute
    >>! a combined work that includes FreeRTOS without being obliged to provide
    >>! the source code for proprietary components outside of the FreeRTOS
    >>! kernel.

    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  Full license text is available from the following
    link: http://www.freertos.org/a00114.html

    1 tab == 4 spaces!

    ***************************************************************************
     *                                                                       *
     *    Having a problem?  Start by reading the FAQ "My application does   *
     *    not run, what could be wrong?"                                     *
     *                                                                       *
     *    http://www.FreeRTOS.org/FAQHelp.html                               *
     *                                                                       *
    ***************************************************************************

    http://www.FreeRTOS.org - Documentation, books, training, latest versions,
    license and Real Time Engineers Ltd. contact details.

    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
    compatible FAT file system, and our tiny thread aware UDP/IP stack.

    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS
    licenses offer ticketed support, indemnification and middleware.

    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
    engineered and independently SIL3 certified version for use in safety and
    mission critical applications that require provable dependability.

    1 tab == 4 spaces!
*/

#ifndef MPU_WRAPPERS_H
#define MPU_WRAPPERS_H

/* This file redefines API functions to be called through a wrapper macro, but
only for ports that are using the MPU. */
#ifdef portUSING_MPU_WRAPPERS

        /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
        included from queue.c or task.c to prevent it from having an effect within
        those files. */
        #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE

                #define xTaskGenericCreate                              MPU_xTaskGenericCreate
                #define vTaskAllocateMPURegions                 MPU_vTaskAllocateMPURegions
                #define vTaskDelete                                             MPU_vTaskDelete
                #define vTaskDelayUntil                                 MPU_vTaskDelayUntil
                #define vTaskDelay                                              MPU_vTaskDelay
                #define uxTaskPriorityGet                               MPU_uxTaskPriorityGet
                #define vTaskPrioritySet                                MPU_vTaskPrioritySet
                #define eTaskGetState                                   MPU_eTaskGetState
                #define vTaskSuspend                                    MPU_vTaskSuspend
                #define xTaskIsTaskSuspended                    MPU_xTaskIsTaskSuspended
                #define vTaskResume                                             MPU_vTaskResume
                #define vTaskSuspendAll                                 MPU_vTaskSuspendAll
                #define xTaskResumeAll                                  MPU_xTaskResumeAll
                #define xTaskGetTickCount                               MPU_xTaskGetTickCount
                #define uxTaskGetNumberOfTasks                  MPU_uxTaskGetNumberOfTasks
                #define vTaskList                                               MPU_vTaskList
                #define vTaskGetRunTimeStats                    MPU_vTaskGetRunTimeStats
                #define vTaskSetApplicationTaskTag              MPU_vTaskSetApplicationTaskTag
                #define xTaskGetApplicationTaskTag              MPU_xTaskGetApplicationTaskTag
                #define xTaskCallApplicationTaskHook    MPU_xTaskCallApplicationTaskHook
                #define uxTaskGetStackHighWaterMark             MPU_uxTaskGetStackHighWaterMark
                #define xTaskGetCurrentTaskHandle               MPU_xTaskGetCurrentTaskHandle
                #define xTaskGetSchedulerState                  MPU_xTaskGetSchedulerState
                #define xTaskGetIdleTaskHandle                  MPU_xTaskGetIdleTaskHandle
                #define uxTaskGetSystemState                            MPU_uxTaskGetSystemState

                #define xQueueGenericCreate                             MPU_xQueueGenericCreate
                #define xQueueCreateMutex                               MPU_xQueueCreateMutex
                #define xQueueGiveMutexRecursive                MPU_xQueueGiveMutexRecursive
                #define xQueueTakeMutexRecursive                MPU_xQueueTakeMutexRecursive
                #define xQueueCreateCountingSemaphore   MPU_xQueueCreateCountingSemaphore
                #define xQueueGenericSend                               MPU_xQueueGenericSend
                #define xQueueAltGenericSend                    MPU_xQueueAltGenericSend
                #define xQueueAltGenericReceive                 MPU_xQueueAltGenericReceive
                #define xQueueGenericReceive                    MPU_xQueueGenericReceive
                #define uxQueueMessagesWaiting                  MPU_uxQueueMessagesWaiting
                #define vQueueDelete                                    MPU_vQueueDelete
                #define xQueueGenericReset                              MPU_xQueueGenericReset
                #define xQueueCreateSet                                 MPU_xQueueCreateSet
                #define xQueueSelectFromSet                             MPU_xQueueSelectFromSet
                #define xQueueAddToSet                                  MPU_xQueueAddToSet
                #define xQueueRemoveFromSet                             MPU_xQueueRemoveFromSet
                #define xQueuePeekFromISR                               MPU_xQueuePeekFromISR

                #define pvPortMalloc                                    MPU_pvPortMalloc
                #define vPortFree                                               MPU_vPortFree
                #define xPortGetFreeHeapSize                    MPU_xPortGetFreeHeapSize
                #define vPortInitialiseBlocks                   MPU_vPortInitialiseBlocks

                #if configQUEUE_REGISTRY_SIZE > 0
                        #define vQueueAddToRegistry                             MPU_vQueueAddToRegistry
                        #define vQueueUnregisterQueue                   MPU_vQueueUnregisterQueue
                #endif

                /* Remove the privileged function macro. */
                #define PRIVILEGED_FUNCTION

        #else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */

                /* Ensure API functions go in the privileged execution section. */
                #define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))
                #define PRIVILEGED_DATA __attribute__((section("privileged_data")))

        #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */

#else /* portUSING_MPU_WRAPPERS */

        #define PRIVILEGED_FUNCTION
        #define PRIVILEGED_DATA
        #define portUSING_MPU_WRAPPERS 0

#endif /* portUSING_MPU_WRAPPERS */


#endif /* MPU_WRAPPERS_H */


